# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/8/27 0027 11:01
@Author : 测试开发工程师
@File : 14. 数据 增删改查.py
@Software: PyCharm
============================
"""

"""
增删改查： CRUD 操作

                      add         commit
SQLalchemy（实例对象） ->  暂存区   ->  数据库

添加数据(create)
单条数据添加：
    1. 实例化类，创建表数据
    user1 = User(id=1,username='张三',email='123@123.com')
    2. 将实例添加到 session(add)
    db.session.add(user1)
    3. 提交更新(commit)
    db.session.commit
    4. 关闭 session
    db.session.close()

批量数据添加:
    1. 多次实例化类，创建多条表数据
     user2 = User(id=2,username='张三',email='123@124.com')
     user3 = User(id=3,username='李四',email='124@123.com')
    2. 将多个实例依次添加到 session 中 (add) 或者一次性添加到 session 中 (add_all)
    db.session.add_all([user2,user3]])
    3. 提交更新
    db.session.commit
    4, 关闭 session
    db.session.close()

读取数据(read)
读取全部数据
格式： 类.query.all()
    res = User.query.all()
    # 遍历数据，得到想要的字段
    for rs in res:
        print(rs.username,rs.email)

条件查询
格式 ： 类.query.filter_by(条件).单条或多条
查询单条数据：
    类.query.filter_by(条件).first()
    # 单条数据查询
    res = User.query.filter_by(gender='男').first()
    print(res)

查询多条数据：
    类.query.filter_by(条件).all()       
    # 多条数据查询
    res = User.query.filter_by(gender='男').all()

多条件查询：
查询单条数据：
    类.query.filter_by(条件).filter_by(条件)...first()
    # 单条数据查询
    res = User.query.filter_by(gender='男').filter_by(username='马力').filter_by(email='aaa').first()
查询多条数据：
    类.query.filter_by(条件).filter_by(条件)...all()
    # 多条数据查询
    res = User.query.filter_by(gender='男').filter_by(username='马力').filter_by(email='aaa').all()
    


修改数据(update)
方式一：
    首先查询出来需要的数据
    # 第一种方式，更新某个字段
    res = User.query.filter_by(id=2).first()
    对查询出来的数据对象进行属性的修改
    res.gender = '女'
    提交 session
    # 提交
    db.session.commit()
    # 关闭
    db.session.close()
方式二：
    给定查询条件进行查询后，直接进行 update 操作
    # 第二种方式，直接调用 update 方法进行更新行数据
    res = User.query.filter_by(id=2).update({'gender':'男'})
    提交 session
    # 提交
    db.session.commit()
    # 关闭
    db.session.close()
    

删除数据(delete)
方式一：
    查询数据
    user = User.query.filter_by(id=1).first()
    对查询出来的数据对象进行删除操作
    db.session.delete(user)
    提交 session
    db.session.commit()
    # 关闭
    db.session.close()
方式二：
    给定查询条件进行查询后，直接进行 delete 操作
    User.query.filter_by(id=2).delete()
    提交 session 
    db.session.commit()
    # 关闭
    db.session.close()

"""
